home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-08-18 | 1.4 KB | 50 lines | [TEXT/R*ch] |
- (* File mosml/examples/pretty/ppexpr.sml
- * Example demonstrating installable prettyprinters.
- *
- * Try it out by running
- * mosml ppexpr.sml
- * from the command line.
- *)
-
- val _ = (load "PP"; load "Int");
-
- datatype expr =
- Cst of int
- | Neg of expr
- | Plus of expr * expr
-
- fun ppexpr pps e0 =
- let open PP
- fun ppe (Cst i) = add_string pps (Int.toString i)
- | ppe (Neg e) = (add_string pps "~"; ppe e)
- | ppe (Plus(e1, e2)) = (begin_block pps CONSISTENT 0;
- add_string pps "(";
- ppe e1;
- add_string pps " + ";
- add_break pps (0, 1);
- ppe e2;
- add_string pps ")";
- end_block pps)
- in
- begin_block pps INCONSISTENT 0;
- ppe e0;
- end_block pps
- end
-
- val e1 = Cst 1;
- val e2 = Cst 2;
- val e3 = Plus(e1, Neg e2);
- val e4 = Plus(Neg e3, e3);
- val e5 = Plus(Neg e4, e4);
- val e6 = Plus(e5, e5);
- val e7 = Plus(e6, e6);
- val e8 = Plus(e3, Plus(e3, Plus(e3, Plus(e3, Plus(e3, Plus(e3, e7))))));
-
- val _ = installPP ppexpr;
-
- val _ = print
- "\nNow a pretty-printer for arithmetic expressions has been installed.\n\
- \To see it in action, evaluate e.g.\n\
- \ e1;\n e3;\n Plus(e1,e3);\n e5;\n e6;\n e7;\n";
-
-